from django.contrib.auth import authenticate
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from rest_framework_simplejwt.tokens import RefreshToken  # 新增导入
import json
from coach.models.user_models import User

@csrf_exempt
@require_POST
def password_login(request):
    """
    用户名密码登录接口
    请求参数：username, password (支持手机号作为用户名)
    """
    try:
        # 解析请求数据
        data = json.loads(request.body)
        username = data.get('username')
        password = data.get('password')
        
        # 验证参数完整性
        if not username or not password:
            return JsonResponse({'code': 400, 'msg': '用户名和密码不能为空'})
        
        # 使用Django内置认证系统验证用户
        user = authenticate(username=username, password=password)

        # 验证失败处理
        if not user:
            # 额外检查是否存在该手机号的用户（如果系统允许手机号登录）
            try:
                user_by_phone = User.objects.get(wechat_phone=username)
                # 存在该手机号用户但密码错误
                return JsonResponse({'code': 401, 'msg': '用户名或密码错误'})
            except User.DoesNotExist:
                return JsonResponse({'code': 401, 'msg': '用户名或密码错误'})
        
        refresh = RefreshToken.for_user(user)
        
        # 登录成功，返回用户基本信息（脱敏处理）
        return JsonResponse({
            'code': 200,
            'data': {
                'userId': user.id,
                'username': user.username,
                'avatar': user.wechat_avatar if user.wechat_avatar else '',
                'phone': user.wechat_phone if user.wechat_phone else '',
                'userType': user.user_type,
                'refresh': str(refresh),
                'access': str(refresh.access_token),
            }
        })
        
    except json.JSONDecodeError:
        return JsonResponse({'code': 400, 'msg': '无效的JSON格式'})
    except Exception as e:
        return JsonResponse({'code': 500, 'msg': f'服务器错误：{str(e)}'})